package com.desire.test;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;


/**
 * @author desire
 */
public class _37_线程_callable implements Callable<Integer> {
    public static void main(String[] args) {
        _37_线程_callable a37线程callable = new _37_线程_callable();
        // 执行 Callable 方式,需要 FutureTask 实现类的支持
        // FutureTask 实现类用于接收运算结果, FutureTask 是 Future 接口的实现类
        FutureTask<Integer> result = new FutureTask<>(a37线程callable);
        new Thread(result).start();

        // 接收线程运算后的结果  300
        try {
            // 只有当 Thread 线程执行完成后,才会打印结果;
            // 因此, FutureTask 也可用于闭锁
            System.out.println(result.get());
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }

    @Override
    public Integer call() throws Exception {
        System.out.println("call()");
        TimeUnit.SECONDS.sleep(10);
        return 300;
    }
}
